package cn.zn.modules.appoin.service;

import cn.zn.modules.appoin.entity.AppoinTimeMain;
import cn.zn.modules.appoin.entity.dto.AppoinTimeMainSaveDTO;
import cn.zn.modules.appoin.entity.vo.AppoinMainCalendar;
import cn.zn.modules.appoin.entity.vo.AppoinMainWorkUser;
import cn.zn.modules.appoin.entity.vo.AppoinWorkUserVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface AppoinTimeMainService extends IService<AppoinTimeMain> {
    /**
     * 查询当天没有工作的人员
     *
     * @param appoinDate
     * @return
     */
    List<AppoinWorkUserVO> queryNoWorkByDate(String appoinDate, Map<String, Object> params);

    /**
     * 查询当天工作人员
     *
     * @param appoinDate 工作时期
     * @param isActive   是否可用，null-不限制条件
     * @return
     */
    List<AppoinMainWorkUser> queryByDate(String appoinDate, Boolean isActive);

    /**
     * 查询某时间区间工作人员
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppoinMainCalendar> queryByInterval(String startDate, String endDate);

    /**
     * 查询某时间区间可用工作时间数量
     *
     * @param startDate
     * @param endDate
     * @return
     */
    Map<String, Integer> queryCountByInterval(String startDate, String endDate);

    /**
     * 查询最大可预约日期
     *
     * @return
     */
    @Deprecated
    AppoinTimeMain queryMax(Long tenantId);

    /**
     * 查询工作人员工作日期（查询生成工作时间明细的记录）
     *
     * @param userCode
     * @return
     */
    List<AppoinMainWorkUser> queryByWorkUser(String userCode, String startDate, String endDate);

    /**
     * 查询工作人员工作日期（查询工作日期设置为启用的记录）
     *
     * @param userCode
     * @return
     */
    List<AppoinMainWorkUser> queryByWorkUser2(String userCode, Date startDate, Date endDate);

    /**
     * 保存工作时间
     *
     * @param tenantId              租户ID
     * @param appoinTimeMainSaveDTO
     */
    Collection<AppoinTimeMain> saveWorkUser(Long tenantId, AppoinTimeMainSaveDTO appoinTimeMainSaveDTO);

    /**
     * 切换工作状态
     *
     * @param id
     */
    void toggleWorkState(String id);

    /**
     * 查询用户工作安排（时间段）
     *
     * @param userCode
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppoinMainCalendar> queryByIntervalAndUser(String userCode, String startDate, String endDate);

    /**
     * 查询工作主表
     * @param date
     * @param userCode
     * @return
     */
    AppoinTimeMain queryByDateAndUser(String date, String userCode);
}
